const path = require('path')

console.log(__filename)
// F:\project\lagou\lg_lesson17\notes\code\nodebase\06-path.js

// // 1. 获取路径基础名称 basename()
// /**
//  * 01 返回的是接收路径中的最后部分 可以是文件名，可以使目录名
//  * 02 参数一路径名 类型是字符串，不是字符串会报错
//  * 03 参数二扩展名，没设置、匹配不上返回完整名称，匹配上了省略扩展名
//  * 04 结尾处有路径分割符，会被忽略掉
//  */
// console.log(path.basename(__filename))
// // 06-path.js
// console.log(path.basename(__filename, '.js'))
// // 06-path
// console.log(path.basename(__filename, '.css'))
// // 06-path.js
// console.log(path.basename('/a/b/c'))
// // c 输出目录最后的部分
// console.log(path.basename('/a/b/c/'))
// // c 结尾有目录分隔符，则会被忽略

// // 2. 获取路径目录名 dirname()
// /**
//  * 01 返回路径中最后一个部分的上一层目录所在路径
//  * 02 也会省略结尾的路径分割符
//  */
// console.log(path.dirname(__filename))
// // F:\project\lagou\lg_lesson17\notes\code\nodebase
// console.log(path.dirname('/a/b/c'))
// // /a/b
// console.log(path.dirname('/a/b/c/'))
// // /a/b

// // 3. 获取路径的扩展名 extname()
// /**
//  * 01 返回path路径中相应文件的后缀名
//  * 02 如果路径中存在多个点，匹配最后一个点到结尾的内容
//  */
// console.log(path.extname(__filename))
// // .js
// console.log(path.extname('/a/b/c'))
// // 
// console.log(path.extname('/a/b/index.html.js.css'))
// // .css
// console.log(path.extname('/a/b/index.html.js.'))
// // .

// // 4. 解析路径 parse()
// /**
//  * 01 接收一个路径，返回一个对象
//  * 02 返回对象中包含的字段：root dir base ext name
//  */
// var obj = path.parse('/a/b/c/index.html')
// console.log(obj)
// // {
// //   root: '/',//目录根节点
// //   dir: '/a/b/c',//除了最后部分的路径名
// //   base: 'index.html',//文件完整名称
// //   ext: '.html',//后缀名
// //   name: 'index'//文件名
// // }
// obj= path.parse('/a/b/c')
// console.log(obj)
// // 没有后缀名则ext为空
// // { root: '/', dir: '/a/b', base: 'c', ext: '', name: 'c' }
// obj= path.parse('./a/b/c')
// // 相对路径则root为空
// // { root: '', dir: './a/b', base: 'c', ext: '', name: 'c' }
// console.log(obj)
// obj= path.parse(__filename)
// console.log(obj)
// // {
// //   root: 'F:\\',
// //   dir: 'F:\\project\\lagou\\lg_lesson17\\notes\\code\\nodebase',
// //   base: '06-path.js',
// //   ext: '.js',
// //   name: '06-path'
// // }

// // 5. 序列号路径 format()
// /**
//  * parse()的相反行为，把对象转为路径字符串
//  */
// var obj = path.parse('/a/b/c/index.html')
// console.log(path.format(obj))
// // /a/b/c\index.html

// // 6. 判断当前路径是否为绝对路径 isAbsolute()
// console.log(path.isAbsolute(__filename))
// // true
// console.log(path.isAbsolute('foo'))
// // false
// console.log(path.isAbsolute('/foo'))
// // true
// console.log(path.isAbsolute('///foo'))
// // true
// console.log(path.isAbsolute(''))
// // false
// console.log(path.isAbsolute('.'))
// // false
// console.log(path.isAbsolute('../bar'))
// // false

// // 7. 拼接路径 join
// // 把几个路径片段从后往前组合成一个完整路径
// console.log(path.join('a/b','c','index.html'))
// // 无绝对路径
// // a\b\c\index.html
// console.log(path.join('/a/b','c','index.html'))
// // 绝对路径写法
// // \a\b\c\index.html
// console.log(path.join('/a/b','c','../','index.html'))
// // 添加 ../ 上一级目录
// // \a\b\index.html
// console.log(path.join('/a/b','c','./','index.html'))
// // 添加 ./ 同级目录
// // \a\b\c\index.html
// console.log(path.join('/a/b','c','','index.html'))
// // 添加 空字符串 目录，无影响
// // \a\b\c\index.html
// console.log(path.join(''))
// // 传入空字符串
// // .

// // 8. 规范化路径 normalize()
// console.log(path.normalize('a/b/c/d'))
// // 本身就规范的路径无变化
// // a\b\c\d
// console.log(path.normalize('a///b/c../d'))
// // 多个斜杠会被规范化处理，..符号不会
// // a\b\c..\d
// console.log(path.normalize('a///\\b/c\\/d'))
// // 双反斜杠会被规范化处理
// // a\b\c\d
// console.log(path.normalize('a///\b/c\\/d'))
// // \b整体作为一个转义字符被处理了
// // a\c\d
// console.log(path.normalize(''))
// // 传入空字符串
// // .

// 9. 绝对路径
console.log(path.resolve())
// 不传参 当前文件的绝对路径
// F:\project\lagou\lg_lesson17\notes\code\nodebase
console.log(path.resolve('a','b'))
// 传参 参数作为后续路径拼接上 如果后续路径中有路径分割符，则规则比较复杂，
// 后面参数有路径分隔符的话，会导致前面的路径被忽略，使用时需注意
// F:\project\lagou\lg_lesson17\notes\code\nodebase\a\b
console.log(path.resolve('a','/b'))
// F:\b
console.log(path.resolve('/a','/b'))
// F:\b
console.log(path.resolve('/a','b'))
// F:\a\b
console.log(path.resolve('/a/b','../c'))
// F:\a\c
